#include "mdp.h"

int rules(mdp_field<int>& v, mdp_site& x) {
	int sum=v(x-0)+v(x-0);
	if(v(x)==0 && sum==1) return 1;
	if(v(x)==1 && sum==2) return 0;
	return v(x);
}		

int default_partitioning_default(int *x, 
			  int ndim, 
			  int *nx) {
  return (x[0]*x[1]) % Nproc;
}


int main(int argc, char** argv) {
	mdp.open_wormholes(argc,argv);

	int L[]={10};
	mdp_lattice board(1,L,default_partitioning_default);
	mdp_field<int> v(board);
	mdp_field<int> w(board);
	mdp_site x(board);

	forallsites(x) v(x)=rand() % 2;

	for(int k=0; k<10; k++) {
		v.update();
		forallsites(x) w(x)=rules(v,x);
		v=w;
	}		
	
	mdp.close_wormholes();
	return 0;
}

